切片 slice
说明
说明
切片是一个拥有 相同类型元素 的 可变长度 的序列
定义方式
说明
T
代表切片元素类型,可以是整型、浮点型、布尔型、切片、map、函数等
切片的元素使用 []
进行访问,在方括号中提供切片的索引即可访问元素,索引的范围从0开始,且不超过切片的最大容量
var name []T
-
方式1 使用
make
创建slice := make([]int, 5) // 创建长度为5的切片,初始值为[0, 0, 0, 0, 0]
-
方式2 直接初始化
slice := []int{1, 2, 3} // 创建切片并初始化
-
方式3 从现有数组中创建切片
arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:4] // 从数组的第2到第4个元素生成切片
使用示例
从数组或切片生成新的切片
切片默认指向一段连续内存区域,可 以是数组,也可以是切片本身
从连续内存区域生成切片是常见的操作,格式如下
说明
slice
表示目标切片对象- 开始位置对应目标切片对象的索引
- 结束位置对应目标切片的结束索引
slice [开始位置:结束位置]
从数组生成切片
var a = [3]int{1, 2, 3}
fmt.Println(a, a[1:2])
输出
说明
- 取出的元素数量为:结束位置-开始位置
- 取出的元素不包含结束位置对应的索引,切片最后一个元素使用
slice[len(slice)-1]
获取 - 当缺省开始位置时,表示从连续区域开头到结束位置
- 当缺省结束位置时,表示从开始位置到整个连续区域末尾
- 两者同时缺省时,与切片本身等效
- 两者同时为0时,等效于空切片
[1 2 3] [2]
从指定范围中生成切片
缺省开始位置 slice[:end]
- 表示从切片的起始位置到指定的结束位置(不含结束位置)
- 等价于
slice[0:end]
slice := []int{10, 20, 30, 40, 50}
// 缺省开始位置
subSlice := slice[:3] // 等价于 slice[0:3]
fmt.Println(subSlice) // 输出:[10 20 30]